LLVM IR
言語やアーキテクチャから独立した独自の中間表現
オンメモリで扱えるぐらいに軽量
変数はレジスタに保存される
2つの形式がある
バイナリ形式
バイナリなだけであって、LLVMアセンブリの命令と一対一対応している
拡張子は.bc
Module
Functionを複数持つ
Function
BasicBlockを複数持つ
C++の関数と同じ
BasicBlock
Instructionを複数持つ
ラベルごとで分けられる
Instruction
一つの命令
それぞれ包含関係でModuleが全てを包含している
LLVM IRの形式
メモリ上のIR表現
ディスク上のビットコード表現
アセンブリ形式の表現
これのみが人間でも読めるもの(?)
基本的な中間表現
きつねさん.icon p.38~がすごい詳しい
Data Layout
データの配置方法
.llのBasicBlockの遷移をグラフにする
手順
$ opt -S hoge.ll -dot-cfg
$ dot -Teps .main.dot -o hoge.eps
以下のような画像が出力される
https://gyazo.com/05dc7e90217d53c874fa03556c91f7f6
参考